# coding: utf8

from tipos_padrao import *

class Inicio (Imagem):
    '''Carrega duas imagens para exibição no início do jogo
        Uso: Inicio(fundo, apresentação)
        -- Carrega as primeiras imagens do jogo'''
    def __init__(self, fundo, ap):
        Imagem.__init__(self, fundo)
        self.ap = pygame.image.load(ap)

class Ator(ObjetoAnimado):
    '''Define o personagem do jogo
        Uso: Ator(imagem1, imagem2, posx, posy)
        -- Carrega duas imagens para animação (ObjetoAnimado)
        -- Posiciona o personagem na tela 
        Atributo:
                velocidade = [0,25]
                -- Ao chamar mover(), faz o personagem cair constantemente'''
    def __init__(self, imagem1, imagem2, x, y):
        ObjetoAnimado.__init__(self, imagem1,imagem2, x, y)
        self.velocidade = [0,25]
    # Faz o personagem andar pela tela
    def mover (self):
        '''Move o personagem dentro da tela (800, 600)
            Uso: Ator.mover()
            -- Chamar em cada quadro para movimento constante
            -- Quando velx for diferente de 0, anima o personagem '''
        if self.rect.centerx < 800 or self.rect.centerx > 0:
            self.rect.move_ip(self.velocidade)
        if self.rect.centerx > 800:
            self.rect.centerx = 799
        elif self.rect.centerx < 0:
            self.rect.centerx = 1
        # Animação de andar (Trocando imagem1 por imagem2)
        if self.velocidade[0] != 0:
                self.animar()
    def esquerda(self):
        '''Gira a imagem do personagem para a esquerda
            Uso: Ator.esquerda()
            -- Quando mover() é chamado mo loop, faz com que
            o personagem ande para a esquerda 
            -- Deve ser chamado durante um evento KEYDOWN'''
        self.imagem = pygame.transform.flip(self.imagem, True, False)
        self.imagem2 = pygame.transform.flip(self.imagem2, True, False)        
        self.velocidade[0] = -15
    def direita (self):
        '''Quando mover() é chamado no loop, move o personagem para a direita
            Uso: Ator.direita() 
            -- Deve ser chamado durante um evento KEYDOWN'''
        self.velocidade[0] = 15
    def parar (self):
        '''Quando mover() é chamado no loop, faz o personagem parar de se mover
            Uso: Ator.parar()
            -- Deve ser usado para parar quando direita() é chamado em KEYDOWN
            -- Deve ser chamado em KEYUP '''
        self.velocidade[0] = 0
    def reset_position (self):
        '''Gira a imagem e para o personagem
            Uso: Ator.reset_position()
            -- Quando esquerda() é chamado em KEYDOWN, reverte a imagem
            para a posição inicial
            -- Chamado em KEYUP '''
        self.imagem = pygame.transform.flip(self.imagem, True, False)
        self.imagem2 = pygame.transform.flip(self.imagem2, True, False)
        self.velocidade[0] = 0
    def reset (self,x, y):
        '''Posiciona o personagem em posx, posy
            Uso: Ator.reset(posx, posy)
            -- Usado para restaurar a posição inicial do personagem '''
        self.rect.center = [x,y]
        
class Balao (ObjetoAnimado):
    '''Define o objeto animado balão
        Uso: Balao(imagem1, imagem2, posx, posy)
        -- (ObjetoAnimado) 
        -- Salva imagem e posição para ser usado em reset()'''
    def __init__(self, imagem1, imagem2, x, y):
        ObjetoAnimado.__init__(self, imagem1, imagem2, x, y)
        self.imagem_reset = imagem1
        self.x = x
        self.y = y
    def reset (self):
        ''' Reposiciona o balão no local inicial
                Uso: Balao.reset()
                -- Usa imagem e posição salvas anteriormente'''
        self.velocidade = [0,0]
        self.rect.center = [self.x, self.y]
        self.imagem = pygame.image.load(self.imagem_reset)